package com.etone.smartAudit.domain;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.etone.smartAudit.dto.FileDTO;
import com.etone.smartAudit.enums.CheckState;
import com.etone.smartAudit.vo.FileVO;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author: 蒋学伟
 * @create: 2020-06-17 17:38:02
 * @Description AuditRisk
 */
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Data
@TableName(value = "f_audit_risk")
public class AuditRisk implements Serializable {

    @TableId(type = IdType.AUTO, value = "intId")
    private Integer id;

    /**
     * 一级目录
     */
    @TableField("vcLevel1")
    private String level1;

    /**
     * 二级目录
     */
    @TableField("vcLevel2")
    private String level2;

    /**
     * 疑点
     */
    @TableField("vcDoubts")
    private String doubts;

    /**
     * 内容摘要
     */
    @TableField("vcContentAbstract")
    private String contentAbstract;

    /**
     * 审计方法
     */
    @TableField("vcMethod")
    private String method;

    /**
     * 审计过程
     */
    @TableField("vcProcess")
    private String process;

    /**
     * 审计结果
     */
    @TableField("vcResult")
    private String result;

    /**
     * 整改办法
     */
    @TableField("vcRectificationMeasures")
    private String rectificationMeasures;

    /**
     * 提交时间
     */
    @TableField("dtCreateTime")
    private Date createTime;

    /**
     * 状态
     */
    @TableField("vcState")
    private CheckState state;

    /**
     * 下一步节点人ID
     */
    @TableField("intNodeAdminId")
    private Integer nodeAdminId;

    /**
     * 下一步节点人名称
     */
    @TableField("vcNodeAdminName")
    private String nodeAdminName;

    /**
     * 模版与附件
     */
    @TableField("vcModules")
    private String modules;

    /**
     * 历史组织过程资产
     */
    @TableField("vcProcessAssets")
    private String processAssets;

    /**
     * 版本更新日期
     */
    @TableField("dtUpdateTime")
    private Date updateTime;

    /**
     * 版本更新日期
     */
    @TableField("dtCheckTime")
    private Date checkTime;

    public List<FileVO> getModuleFiles() {
        if (!StringUtils.isEmpty(modules)) {
            return JSON.parseArray(modules, FileVO.class);
        }
        return null;
    }

    public void setModulesFromFileDTO(List<FileDTO> moduleFiles) {
        if (!CollectionUtils.isEmpty(moduleFiles)) {
            modules = JSONArray.toJSONString(moduleFiles);
        }
    }

    public List<FileVO> getProcessAssetFiles() {
        if (!StringUtils.isEmpty(processAssets)) {
            return JSON.parseArray(processAssets, FileVO.class);
        }
        return null;
    }

    public void setProcessAssetsFromFileDTO(List<FileDTO> processAssetFiles) {
        if (!CollectionUtils.isEmpty(processAssetFiles)) {
            processAssets = JSONArray.toJSONString(processAssetFiles);
        }
    }

    public List<FileVO> getAllFiles() {
        List<FileVO> files = new ArrayList<>();
        List<FileVO> moduleFiles = getModuleFiles();
        if (!CollectionUtils.isEmpty(moduleFiles)) {
            files.addAll(moduleFiles);
        }

        List<FileVO> processAssetsFiles = getProcessAssetFiles();
        if (!CollectionUtils.isEmpty(processAssetsFiles)) {
            files.addAll(processAssetsFiles);
        }

        return files;
    }


}
